/*
 *  Copyright (C) 2009 Antonio Mata Chamorro
 *  
 *  Este programa es software libre: usted puede redistribuirlo y/o modificarlo
 *  bajo los t�rminos de la Licencia P�blica General GNU publicada
 *  por la Fundaci�n para el Software Libre, ya sea la versi�n 3
 *  de la Licencia, o (a su elecci�n) cualquier versi�n posterior.
 *  
 *  Este programa se distribuye con la esperanza de que sea �til, pero 
 *  SIN GARANT�A ALGUNA; ni siquiera la garant�a impl�cita
 *  MERCANTIL o de APTITUD PARA UN PROP�SITO DETERMINADO. 
 *  Consulte los detalles de la Licencia P�blica General GNU para obtener 
 *  una informaci�n m�s detallada. 
 *  
 *  Deber�a haber recibido una copia de la Licencia P�blica General GNU
 *  junto a este programa. 
 *  En caso contrario, consulte <http://www.gnu.org/licenses/>.
 *   
 */
package org.javahispano.javacup.tacticas_aceptadas.amata.com.amata.javacup.tacticas;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * Lista de {@link Spot} que son los mas adecuados seg�n un
 * {@link SpotCalculator}.
 * 
 * @author Antonio Mata Chamorro
 * */
public class SpotResults {
	private int number;
	private List<Spot> positions = new ArrayList<Spot>();

	/**
	 * Numero de resultados deseados. Es el m�nimo entre el tama�o real de
	 * resultados contenidos en el objeto y el valor fijado con el m�todo
	 * setNumber(int).
	 * 
	 * @return numero de spot deseados contenidos
	 * */
	public int getNumber() {
		return Math.min(number, positions.size());
	}

	/**
	 * Numero real de resultados que contiene el objeto.
	 * */
	public int size() {
		return positions.size();
	}

	/**
	 * Fija el numero de Spot deseados como resultado. Este valor puede ser
	 * ignorado por la implementaci�n de {@link SpotCalculator}
	 * */
	public void setNumber(int number) {
		this.number = number;
	}

	public Spot getSpot(int i) {
		return positions.get(i);
	}

	public void addSpot(Spot spot) {
		this.positions.add(spot);
		// this.number = positions.size();
	}

	public void swap(int x, int y) {
		Collections.swap(this.positions, x, y);
	}

	/**
	 * Vacia la lista de resultados actuales
	 * */
	public void clear() {
		this.positions.clear();
	}

	/**
	 * Ordena los puntos de mayor a menor puntuaci�n ({@link Spot#getValue()})
	 * */
	public void sort() {
		Collections.sort(this.positions);
		Collections.reverse(this.positions);
	}
}
